﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

using MongoDB.Driver;
using MongoDB.Bson;
using IntroMongo.Models;
using MongoDB.Driver.Builders;

namespace IntroMongo.Controllers
{
    public class UserController : Controller
    {
        public ActionResult Index()
        {
            // Get all users by sorting by createdate
            var users = MongoWrapper.Instance().
                            GetCollection("users").
                            FindAll().
                            SetSortOrder(SortBy.Descending("createdate"));

            return View(users);
        }

        public ActionResult Edit(string id)
        {
            // Obtain id compatible with MongoDB to query
            var objectId = ObjectId.Parse(id);

            // Get user by id
            var user = MongoWrapper.Instance().
                            GetCollection("users").
                            FindOneByIdAs<User>(ObjectId.Parse(id));

            return View(user);
        }

        [HttpPost]
        public ActionResult Edit(string id, User userToEdit)
        {
            // Get user collection reference
            var users = MongoWrapper.Instance().GetCollection("users");

            // Update user by id
            var user = users.FindOneById(ObjectId.Parse(id));

            user["firstname"] = userToEdit.FirstName;
            user["lastname"] = userToEdit.LastName;
            user["age"] = userToEdit.Age;

            // Update user object
            users.Save(user);

            return RedirectToAction("Index");
        }

        public ActionResult New()
        {
            return View();
        }

        [HttpPost]
        public ActionResult New(string id, User userToEdit)
        {
            // Get user collection reference
            var users = MongoWrapper.Instance().GetCollection("users");

            // Create BsonDocument object for new user
            var user = new BsonDocument();
            user["firstname"] = userToEdit.FirstName;
            user["lastname"] = userToEdit.LastName;
            user["age"] = userToEdit.Age;
            user["createdate"] = DateTime.Now;

            // Insert new user object to collection
            users.Insert(user);

            return RedirectToAction("Index");
        }
    }
}
